setwd("C:/CEA with R tutorial")
setwd("~/C/CEA with R tutorial")
install.packages("mstate")
install.packages("eha")
install.packages("caTools")
install.packages("mc2d")
install.packages("msm")
install.packages("cmprsk")
install.packages("flexsurv")
install.packages("BBmisc")
### READ IN REQUIRED PACKAGES INTO R
library(mstate)
library(eha)
library(caTools)
library(mc2d)
library(msm)
library(cmprsk)
library(flexsurv)
library(BBmisc)
### READ FUNCTIONS INTO R
source("function modelparam.R")
source("function Markov.R")
source("function semiMarkov.R")
source("function visualMarkov.R")
source("function visualsemiMarkov.R")
#source("function proportion.R") not run - requires actual data
source("function meanLY.R")
source("function PSAprob.R")
source("function PSAmeanLY.R")
source("function PSAQALY.R")
source("function CEplane.R")
source("function CEAC.R")
### READ IN DATA
#==============================================================================
# NOTE - THE DATASET USED IN THIS ILLUSTRATION IS NOT ACTUAL TRIAL DATA, BUT
# HAS BEEN GENERATED BY DIGITISING PUBLISHED KAPLAN-MEIER CURVES. THEREFORE
# PATIENT IDENTIFIERS (PATID) ARE NOT AVAILABLE. ALSO VARIABLES ON THE SAME ROW,
# SUCH AS TIME AND STATUS FOR DIFFERENT EVENTS, DO NOT NECESSARILY RELATE TO
# THE SAME PATIENT. IT IS NOT POSSIBLE TO ACCURATELY REFLECT A
# "ONE PATIENT - ONE ROW" DATASET FOR THE MODEL IN THIS ILLUSTRATION WITHOUT THE
# ACTUAL TRIAL DATA.
# THE  VARIABLE HAS BEEN ADDED FROM THE REAL DATA TO ALLOW STATE-ARRIVAL
# EXTENDED MODELLING
#==============================================================================
data<-read.table("data.txt",sep="\t",skip=1)
names(data)=c("patid","treat","prog","death", "prog_t","death_t",
"progdeath", "progdeath_t")
### variables in the dataset are:
### patid          patient identification number
### treat          treatment    0=FC, 1=RFC
### prog           progression  0=no, 1=yes
### death          death        0=no, 1=yes
### prog_t         time (in months) to progression or last known not to have a progression
### death_t        time (in months) to death or last known to be alive
### progdeath      progression or death 0=no, 1=yes
### progdeath_t    time (in months) to progression or death or last known to be alive
###                without progression
### convert times from months to years
data$prog_ty<-data$prog_t/12
data$death_ty<-data$death_t/12
data$progdeath_ty<-data$progdeath_t/12
### create data subsets based on treatment arm
RFCdata<-subset(data, treat==1)
FCdata<-subset(data, treat==0)
### create competing risk indicatior
### 0=did not die or have a progression, 1=had a progression, 2=died without progression
RFCdata$crstatus<-0
RFCdata$crstatus[RFCdata$prog==1]<-1
RFCdata$crstatus[RFCdata$prog==0 & RFCdata$death==1]<-2
FCdata$crstatus<-0
FCdata$crstatus[FCdata$prog==1]<-1
FCdata$crstatus[FCdata$prog==0 & FCdata$death==1]<-2
### create data subset for those who had progression
RFCdataprog<-subset(RFCdata, prog==1)
RFCdataprog$time<-RFCdataprog$death_ty-RFCdataprog$prog_ty
#######  ILLNESS-DEATH MODEL DATA PREPARATION WITH MSTATE
### create transition matrix
### sets up a matrix that shows the states that can be reached from each state. In this
### example the states progression and death can be reached from the progression-free
### state, the death state can be reached from the progression state and no further
### movement is possible from the death state
tmat<- transMat(list(c(2,3), 3, c()),
names = c("progression-free", "progression", "death"))
tmat
### create transition matrix with death split into two states
tmat2 <- transMat(x = list(c(2, 4), c(3), c(), c()),
names=c("PFS", "prog",
"death after prog", "death without prog"))
tmat2
### create dataset that can be used for multi-state modelling
covs<-c("treat","prog_ty")
msmcancer<-msprep(time=c(NA, "prog_ty", "death_ty"),
status=c(NA, "prog", "death"), data=data, trans=tmat,keep=covs)
### create datasets specific to each transition
msmcancer1<-subset(msmcancer,trans==1)
msmcancer2<-subset(msmcancer,trans==2)
msmcancer3<-subset(msmcancer,trans==3)
### create data subsets based on treatment arm
msmcancer1FC<-subset(msmcancer1,treat==0)
msmcancer2FC<-subset(msmcancer2,treat==0)
msmcancer3FC<-subset(msmcancer3,treat==0)
msmcancer1RFC<-subset(msmcancer1,treat==1)
msmcancer2RFC<-subset(msmcancer2,treat==1)
msmcancer3RFC<-subset(msmcancer3,treat==1)
CoxMarkov<-coxph(Surv(Tstart,Tstop,status)~treat+prog_ty,
data=msmcancer3,method = "breslow")
summary(CoxMarkov)
